package com.shj.em.biz.prod.service;

import com.shj.em.biz.prod.dto.OrderEffortDTO;
import com.shj.em.biz.prod.entity.Effort;
import com.baomidou.mybatisplus.service.IService;
import com.baomidou.mybatisplus.plugins.Page;
import com.shj.em.biz.hr.entity.Emp;
import com.shj.em.biz.sys.entity.RankAmount;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 员工工作时间表 服务类
 *
 * @author Shen Huang Jian
 * @since 2018-07-16
 */
public interface EffortService extends IService<Effort> {

    /**
     * 分页查询
     * @return
     */
    Page<Effort> queryEffortPage(Map<String, Object> params);

    List<Effort> findEffortsByDeptOrderAndDt(Long deptId, Long orderId, Date workDt);

    Map<Long, BigDecimal> getOrderTotalEffort(int year);

    Map<Long, List<BigDecimal>> getEmpTotalEffortPerMonth(int year);

    List<Effort> getEmpEffortPerOrder(int year);

    List<Effort> getEmpEffortInYear(int year);

    /**
     * 获得某个员工的某个月的原始的工时信息，用于检查报表是否正确
     *
     * @param year
     * @param month
     * @param empId
     * @return
     */
    List<OrderEffortDTO> getEmpWorkOrderInfo(int year, int month, long empId);

    /**
     * 获得这个员工在 这个年和月时所属的级别和对应的上下限金额
     * @param year
     * @param month
     * @param empId
     * @return
     */
    RankAmount getEmpRankAmount(int year, int month, Long empId);

    /**
     * 获得这段时间内属于这个部门的员工，此方法现在仅用于获得二部下面的每个分组的员工
     * @param deptId
     * @return
     */
    List<Emp> getEmpsByDeptId(int year, int month, long deptId);
}
